iT邦幫忙

2022 iThome 鐵人賽

DAY 13
1

昨天的文章所提到的 HTTPS 能將我們從瀏覽器發送 HTTP request 到 Server 的過程變得更為安全可信任,而其中的 HTTP request 依據種類的不同會使用對應的方法來做發送,今天我們會對 Request 與 Resoponse 來做介紹。

Requests

這個是 MDN 所提供的範例 requests

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
  • 方法:GET
  • 路徑:/
  • 傳輸協定的版本:HTTP/1.1
  • Headers:
    • Host, Accept-Language
    • 此為選填的資訊,是要給伺服器的額外資訊
  • Body:在 POST 的方法中,會在這邊放入要帶到伺服器的資料

Response

MDN 上提供的回傳 response 範例

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html>… (here come the 29769 bytes of the requested web page)
  • 傳輸協定的版本:HTTP/1.1
  • 狀態碼:200
  • 狀態訊息:OK
  • Headers:
    • Date, Server, Last-Modified, ETag, Accept-Ranges, Content-Length, Content-Type
    • 與 request 的 Headers 相同,是要給瀏覽器的額外資訊
  • Body:html
    response 提供給 request 的資料

Request & Response 的結構

我們可以從上面兩個範例觀察到 Request 與 Response 的結構有一定程度的相似:

  1. 第一行:描述了 Request 的方法與路徑、Response 的狀態
    • 方法(Method):用動詞(GET, PUT, POST)或名詞(HEAD, OPTIONS)描述此次的 Request
    • 路徑(URL):Request 要發送到的目標路徑,有許多種形式,絕對路徑、相對路徑、port 等
    • 傳輸協定的版本(HTTP version)
    • 狀態碼(Status code):可以從這個數字得知 request 的成功與否,以及為何失敗
    • 狀態訊息(Status message):對狀態碼的簡短敘述
  2. HTTP Headers:除了 Request 與 Response 的資訊外,有時也包含了對 Body 的敘述
    有許多不同種類的 headers 可以被帶入在 Request 之中:
  3. 分隔行
  4. Body:
    • 並非所有的 Request 都有 Body,GET、HEAD、DELETE、OPTIONS 皆不需要,最常用到 Body 的是 POST
    • 關於 Body 的資訊或大小會在第一行與 Headers 的地方設定;送出 Request 所包含的參數與資料,從 Response 收到的資料
    • Body 又分為兩種:
      • Single-resource bodies:僅有一個檔案,可用兩種 Headers(Content-Type, Content-Length) 來設定;在 Response 時,若此檔案的長度未知,則由 Headers 的 Transfer-Encoding 來設定
      • Multiple-resource bodies:含有多個檔案

圖片來源

Request Methods

  • GET:單純用來取得資源時所用到的方法
  • POST:需要建立新的資料時使用的方法,會將資料透過 Body 送往伺服器,而所帶的資料需透過 Content-Type header 來設定,如果傳了兩次相同的 POST,這會在伺服器建立兩個儘管內容相同,但是編號不同的兩個資料
  • PUT:會建立或是取代整個特定的資料,與 POST 不同的是,儘管傳了兩次相同的 PUT Request,她會影響的仍舊只有一項資料
  • PATCH:與 POST 類似,都會對指定的資料進行更新,但不同的地方在於 PATCH 只會將有變更的部分更新,而不會全部取代
  • DELETE:刪除指定的資料
  • HEAD:與 GET 類似,但用 HEAD 的話回傳的 Response 並不會有 Body,即使 Response 回傳了 Body 也會被忽略。我們可以用 HEAD 來取得檔案的大小(Content-Length)而不用下載他
  • OPTIONS:透過 OPTIONS 來取得伺服器對溝通方式的設定(像是拿來確認 CORS 的設定)
  • TRACE:用來確認與目標 URL 間的連線是否正常(200/OK)
  • CONNECT:與請求資源端建立一個雙向的通訊管道,可以用在存取 HTTPS(SSL) 的網站,

參考


上一篇
Day12 - HTTP & HTTPS
下一篇
Day14 - API & RESTful API
系列文
因為拖延症而沒有好好準備有系統性文章架構的我只能靠一天一筆記來贖罪30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
孤獨一隻雞
iT邦研究生 4 級 ‧ 2022-09-28 00:39:41

待補......

補ㄌ...

0
Ray
iT邦研究生 4 級 ‧ 2022-09-28 09:18:35

有機會介紹 RESTful API 嗎

豪!TAT

0
一顆蘋果熊
iT邦新手 5 級 ‧ 2022-09-29 21:36:17

有機會請我 喝咖啡 嗎

看來是惹...

我要留言

立即登入留言